CodeIgniter এর সিকিউরিটি

Web Development - কোডইগনাইটার (Codeigniter) -

CodeIgniter ফ্রেমওয়ার্কটি সিকিউরিটির দিক থেকে অনেক গুরুত্বপূর্ণ ফিচার সরবরাহ করে, যা অ্যাপ্লিকেশনকে বিভিন্ন ধরনের আক্রমণ (যেমন XSS, CSRF, SQL Injection, এবং ফাইল আপলোড নিরাপত্তা) থেকে রক্ষা করতে সাহায্য করে। সিকিউরিটি ব্যবস্থার সঠিক ব্যবহার অ্যাপ্লিকেশনের ডেটা ও ব্যবহারকারীর নিরাপত্তা নিশ্চিত করতে সাহায্য করে।

এখানে CodeIgniter-এ সিকিউরিটির জন্য কিছু গুরুত্বপূর্ণ টুলস এবং কনফিগারেশন আলোচনা করা হলো।


১. XSS (Cross-Site Scripting) সুরক্ষা

XSS (Cross-Site Scripting) আক্রমণ একটি জনপ্রিয় আক্রমণ যা ব্যবহারকারীর ইনপুট থেকে স্ক্রিপ্ট ইনজেক্ট করে। CodeIgniter XSS সুরক্ষার জন্য বিল্ট-ইন ফিচার সরবরাহ করে।

XSS সুরক্ষা সক্রিয় করা:

CodeIgniter-এ XSS সুরক্ষা ডিফল্টভাবে সক্রিয় থাকে। তবে, আপনি Config/Security.php ফাইলে এটি কনফিগার করতে পারেন:

public $XSSFilter = true; // XSS ফিল্টার চালু করা

XSS সুরক্ষা ব্যবহার:

  • esc() ফাংশন: এটি HTML ইনপুটকে সেফ করে এবং XSS আক্রমণ থেকে সুরক্ষা প্রদান করে।
$username = esc($this->request->getVar('username'));
  • purify() ফাংশন: এটি HTML ডেটা ফিল্টার করতে সাহায্য করে।
$cleaned_data = \Config\Services::security()->xss_clean($input_data);

২. CSRF (Cross-Site Request Forgery) সুরক্ষা

CSRF আক্রমণ একটি অ্যাটাক যা একজন ব্যবহারকারীকে অনিচ্ছাকৃতভাবে ক্ষতিকর রিকোয়েস্ট পাঠাতে বাধ্য করে। CodeIgniter CSRF সুরক্ষার জন্য বিল্ট-ইন ফিচার সরবরাহ করে।

CSRF সুরক্ষা সক্রিয় করা:

আপনি Config/Security.php ফাইলে CSRF সুরক্ষা সক্রিয় করতে পারেন:

public $CSRFProtection = true; // CSRF সুরক্ষা চালু করা
public $CSRFTokenName = 'csrf_test_name'; // CSRF টোকেনের নাম
public $CSRFHeaderName = 'X-CSRF-TOKEN'; // CSRF হেডারের নাম
public $CSRFExpire = 7200; // CSRF টোকেনের মেয়াদ শেষ হওয়ার সময়

CSRF টোকেন ব্যবহার:

CodeIgniter ফর্মে CSRF টোকেন ব্যবহার করতে নিম্নলিখিত কোডটি ব্যবহার করুন:

<form action="/submit" method="post">
    <?= csrf_field() ?> <!-- CSRF টোকেন -->
    <input type="text" name="username">
    <button type="submit">Submit</button>
</form>

৩. SQL Injection সুরক্ষা

SQL Injection হল এমন একটি আক্রমণ যেখানে আক্রমণকারী ডাটাবেসে অবৈধ SQL কোড ইনজেক্ট করতে সক্ষম হয়। CodeIgniter এর Query Builder SQL Injection থেকে সুরক্ষা নিশ্চিত করে।

SQL Injection থেকে সুরক্ষা:

  • Query Builder ব্যবহার করুন:
// SQL ইনজেকশন প্রতিরোধের জন্য Query Builder ব্যবহার করুন
$builder = $db->table('users');
$builder->where('email', $email);
$query = $builder->get();
  • bindParam() ফাংশন ব্যবহার করুন:
$query = $this->db->query("SELECT * FROM users WHERE email = :email", ['email' => $email]);

৪. ফাইল আপলোড সুরক্ষা

CodeIgniter ফাইল আপলোডের সময় সুরক্ষা নিশ্চিত করতে সাহায্য করে। এটি আপলোডের ফাইলের টাইপ এবং সাইজ চেক করে।

ফাইল আপলোড সুরক্ষা:

$validationRules = [
    'file' => 'uploaded[file]|max_size[file,2048]|ext_in[file,jpg,jpeg,png,gif]|mime_in[file,image/jpg,image/jpeg,image/png,image/gif]'
];

if ($this->validate($validationRules)) {
    $file = $this->request->getFile('file');
    if ($file->isValid() && !$file->hasMoved()) {
        $file->move(WRITEPATH . 'uploads');
    }
}
  • ফাইল এক্সটেনশন এবং MIME টাইপ যাচাই করুন: ফাইল আপলোড করার সময় সঠিক এক্সটেনশন এবং MIME টাইপ চেক করুন।

৫. Password হ্যাশিং

Password Hashing ব্যবহারকারীর পাসওয়ার্ড সুরক্ষিত রাখতে অত্যন্ত গুরুত্বপূর্ণ। CodeIgniter-এ Password Hashing করার জন্য password_hash() এবং password_verify() ফাংশন ব্যবহার করা হয়।

Password Hashing:

$password = 'user_password';
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);

// যখন ব্যবহারকারীর লগইন হচ্ছে:
if (password_verify($password, $hashedPassword)) {
    echo 'Password is correct!';
} else {
    echo 'Invalid password!';
}

৬. Session Hijacking Prevention

Session Hijacking হল একটি আক্রমণ যেখানে আক্রমণকারী ব্যবহারকারীর সেশন টোকেন চুরি করে। এটি প্রতিরোধ করতে, CodeIgniter কিছু সেশন সুরক্ষা বৈশিষ্ট্য সরবরাহ করে।

সেশন সুরক্ষা কনফিগারেশন:

public $sessionMatchIP = true; // সেশন আইপি ঠিকানা যাচাই
public $sessionTimeToUpdate = 300; // সেশন পুনঃজেনারেট করার সময়
public $sessionRegenerateDestroy = true; // সেশন রিজেনারেট করলে পুরানো সেশন ধ্বংস হবে

৭. HTTPS এবং Secure Cookies

আপনার অ্যাপ্লিকেশনটি HTTPS ব্যবহার করলে এটি সংবেদনশীল তথ্য (যেমন লগইন পাসওয়ার্ড) সুরক্ষিত রাখতে সাহায্য করে। CodeIgniter-এ secure কুকি ব্যবহার করে সেশন সুরক্ষা বাড়ানো যায়।

HTTPS এবং Secure Cookies কনফিগার:

public $cookieSecure = true; // কুকির জন্য Secure সেট করা
public $cookieHTTPOnly = true; // কুকির জন্য HTTPOnly সেট করা

সারসংক্ষেপ

CodeIgniter-এ সিকিউরিটি অ্যাপ্লিকেশনকে সুরক্ষিত রাখতে অত্যন্ত গুরুত্বপূর্ণ। XSS, CSRF, SQL Injection, ফাইল আপলোড সুরক্ষা, Password Hashing, এবং Session Hijacking Prevention সহ বিভিন্ন নিরাপত্তা ফিচার ব্যবহারে আপনার অ্যাপ্লিকেশনকে আক্রমণ থেকে রক্ষা করা যায়। CodeIgniter এর বিল্ট-ইন সিকিউরিটি ফিচার এবং কনফিগারেশন সঠিকভাবে ব্যবহার করলে অ্যাপ্লিকেশনকে সুরক্ষিত রাখা সম্ভব।

Content added By

Input Data Sanitization এবং Validation

Data sanitization এবং validation হল ওয়েব অ্যাপ্লিকেশন নিরাপত্তা নিশ্চিত করার জন্য গুরুত্বপূর্ণ পদ্ধতি। CodeIgniter এই দুটি প্রক্রিয়াকে সহজভাবে পরিচালনা করতে সহায়তা করে, যা ইউজার ইনপুটকে সুরক্ষিত এবং সঠিক করে তোলে। এই দুটি পদ্ধতি বিভিন্ন ধরনের আক্রমণ যেমন SQL injection, XSS (Cross-Site Scripting), এবং CSRF (Cross-Site Request Forgery) প্রতিরোধে সহায়তা করে।


1. Input Data Sanitization

Sanitization হল একটি প্রক্রিয়া যার মাধ্যমে ইউজারের ইনপুট থেকে অবাঞ্ছিত বা বিপজ্জনক চরিত্র বা কোড মুছে ফেলা হয়। এটি ইনপুট ডেটাকে clean করে তোলে যাতে সেটি নিরাপদে প্রসেস করা যায়।

CodeIgniter-এর Input Class ইনপুট ডেটা স্যানিটাইজ করতে সাহায্য করে।

উদাহরণ: Input Sanitization

$this->load->library('security');

// Get sanitized input
$username = $this->input->post('username', TRUE); // TRUE to sanitize
$password = $this->input->post('password', TRUE);

// Sanitization automatically applies XSS filtering

এখানে, TRUE প্যারামিটার স্যানিটাইজেশন প্রক্রিয়া চালু করে, যা ইনপুটের মধ্যে XSS attacks রোধ করতে সহায়ক।

2. Validation (ইনপুট ভ্যালিডেশন)

Validation হল এমন একটি প্রক্রিয়া যার মাধ্যমে ইনপুট ডেটা নির্দিষ্ট শর্তের সাথে মিলিয়ে যাচাই করা হয়, যাতে ইনপুট সঠিক ফরম্যাটে থাকে এবং প্রয়োজনীয় শর্ত পূরণ করে।

CodeIgniter Form Validation Class সরবরাহ করে, যা ইনপুট ভ্যালিডেশনকে সহজ করে তোলে।

Form Validation কনফিগারেশন

প্রথমে Form Validation Library লোড করতে হবে:

$this->load->library('form_validation');

এরপর, আপনি ফর্মের ইনপুটের জন্য ভ্যালিডেশন রুলস সেট করবেন।

উদাহরণ: ইনপুট ভ্যালিডেশন

$this->form_validation->set_rules('username', 'Username', 'required|min_length[5]|max_length[12]');
$this->form_validation->set_rules('password', 'Password', 'required|min_length[8]');

// ফর্ম ভ্যালিডেশন চালানো
if ($this->form_validation->run() == FALSE) {
    // ইনপুট ভ্যালিডেশন ব্যর্থ হলে
    echo validation_errors(); // এর মাধ্যমে ত্রুটির বার্তা দেখানো হবে
} else {
    // ইনপুট সঠিক হলে
    echo "Form Validation Successful!";
}

এখানে, set_rules() মেথডের মাধ্যমে ফিল্ডের জন্য ভ্যালিডেশন রুলস নির্ধারণ করা হয়:

  • required: ফিল্ডটি অবশ্যই পূর্ণ হতে হবে।
  • min_length[5]: মিনিমাম ৫ অক্ষর হতে হবে।
  • max_length[12]: সর্বাধিক ১২ অক্ষর হতে হবে।

3. XSS Filtering (Cross-Site Scripting Filtering)

CodeIgniter-এর XSS Filtering স্বয়ংক্রিয়ভাবে ইনপুটের মধ্যে সম্ভাব্য XSS attacks প্রতিরোধ করে।

উদাহরণ: XSS Filtering

// ইউজার ইনপুট থেকে XSS ফিল্টারিং
$username = $this->security->xss_clean($this->input->post('username'));

// XSS ফিল্টারিংয়ের মাধ্যমে পটেনশিয়াল আক্রমণ প্রতিরোধ

এখানে xss_clean() মেথড ইনপুটে থাকা JavaScript বা HTML tags মুছে ফেলবে যা XSS attack তৈরি করতে পারে।


4. CSRF Protection (Cross-Site Request Forgery)

CodeIgniter CSRF protection সক্রিয়ভাবে ফর্মের মাধ্যমে অবৈধ রিকোয়েস্টগুলো প্রতিরোধ করতে সহায়তা করে।

CSRF Protection কনফিগারেশন

  1. app/Config/Security.php ফাইলে CSRF সক্রিয় করা:
public $CSRFProtection = true;
  1. CSRF Token ফর্মে অন্তর্ভুক্ত করা: CodeIgniter নিজে CSRF token জেনারেট করে এবং ফর্মে যোগ করে। আপনাকে ফর্মে নিম্নলিখিত কোডটি যুক্ত করতে হবে:
<?= csrf_field(); ?>

এটি স্বয়ংক্রিয়ভাবে hidden CSRF token তৈরি করবে এবং সাবমিট করা ফর্মের মাধ্যমে এটি যাচাই করবে।


5. Custom Validation Rules

CodeIgniter আপনাকে কাস্টম ভ্যালিডেশন রুলস তৈরি করার সুযোগ দেয়। আপনি set_message() এবং callback_function ব্যবহার করে কাস্টম ভ্যালিডেশন রুলস যোগ করতে পারেন।

উদাহরণ: কাস্টম ভ্যালিডেশন রুল

// কাস্টম ভ্যালিডেশন রুল তৈরি
public function validate_username($str)
{
    if ($str == 'admin') {
        $this->form_validation->set_message('validate_username', 'The {field} field cannot be "admin".');
        return FALSE;
    }
    return TRUE;
}

$this->form_validation->set_rules('username', 'Username', 'required|callback_validate_username');

এখানে, validate_username() ফাংশন একটি কাস্টম ভ্যালিডেশন রুল হিসেবে কাজ করছে যা "admin" শব্দটি ইনপুট হিসাবে গ্রহণ করবে না।


6. Sanitizing and Validating Files

ফাইল আপলোডের সময়ও স্যানিটাইজেশন এবং ভ্যালিডেশন অত্যন্ত গুরুত্বপূর্ণ। CodeIgniter ফাইল আপলোডের জন্য সঠিক ফাইল টাইপ, সাইজ এবং এক্সটেনশন যাচাই করতে পারে।

উদাহরণ: ফাইল আপলোড ভ্যালিডেশন

$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'jpg|jpeg|png';
$config['max_size'] = 2048; // Max size in KB

$this->load->library('upload', $config);

if (!$this->upload->do_upload('userfile')) {
    echo $this->upload->display_errors();
} else {
    $data = $this->upload->data();
    echo "File uploaded successfully!";
}

এখানে:

  • allowed_types: শুধুমাত্র jpg, jpeg, এবং png ফাইল প্রকার অনুমোদিত।
  • max_size: ফাইল সাইজের সীমা 2MB (2048KB)।

সারাংশ

  • Sanitization হল ইনপুট ডেটা থেকে অবাঞ্ছিত বা বিপজ্জনক চরিত্র/কোড মুছে ফেলা, যা নিরাপত্তা উন্নত করে।
  • Validation হল ইনপুট ডেটা যাচাই করা, যাতে এটি সঠিক এবং প্রয়োজনীয় শর্ত পূরণ করে।
  • CodeIgniter XSS filtering এবং CSRF protection দিয়ে ইনপুট সুরক্ষা বাড়ায়।
  • কাস্টম ভ্যালিডেশন রুলস এবং ফাইল আপলোড ভ্যালিডেশনসহ ইনপুট স্যানিটাইজেশন এবং ভ্যালিডেশন প্রক্রিয়া নিরাপদ এবং কার্যকরী ওয়েব অ্যাপ্লিকেশন তৈরি করতে সহায়ক।
Content added By

XSS এবং CSRF থেকে সুরক্ষা

XSS (Cross-Site Scripting) এবং CSRF (Cross-Site Request Forgery) হল দুটি সাধারণ নিরাপত্তা হুমকি, যা ওয়েব অ্যাপ্লিকেশনে আক্রমণকারী দ্বারা করা হতে পারে। CodeIgniter এই দুটি আক্রমণ থেকে সুরক্ষা দেওয়ার জন্য বিভিন্ন বিল্ট-ইন ফিচার সরবরাহ করে।


XSS (Cross-Site Scripting) আক্রমণ

XSS আক্রমণে, আক্রমণকারী ম্যালিশিয়াস স্ক্রিপ্ট কোড ব্যবহারকারীর ব্রাউজারে চালানোর জন্য একটি ওয়েব অ্যাপ্লিকেশনকে প্রভাবিত করে। এটি ব্যবহারকারীর সেশন, কুকি, বা অন্যান্য গুরুত্বপূর্ণ তথ্য চুরি করার জন্য ব্যবহৃত হতে পারে।

CodeIgniter-এ XSS সুরক্ষা

CodeIgniter-এ XSS Filtering ফিচারটি বিল্ট-ইনভাবে রয়েছে, যা ইউজার ইনপুটে ম্যালিশিয়াস স্ক্রিপ্ট ইনজেকশন ব্লক করতে সহায়তা করে।

XSS সুরক্ষা সক্ষম করা

CodeIgniter-এর Security ক্লাসে XSS ফিল্টারিং চালু করা থাকে, তবে এটি ইনপুটে ম্যালিশিয়াস কোড থাকার ক্ষেত্রে তা ফিল্টার করে।

  1. xss_clean() ফাংশন ব্যবহার:
    • এটি ইনপুট ডেটা ক্লিন করতে এবং XSS আক্রমণ থেকে সুরক্ষা দিতে ব্যবহৃত হয়।
$clean_input = $this->security->xss_clean($this->request->getPost('user_input'));
  1. HTML ফর্ম ইনপুট ফিল্টারিং:
    • form_open() ফর্ম হেল্পার ব্যবহার করার সময় xss_clean() চালানো যাবে।
$clean_input = $this->security->xss_clean($this->request->getPost('input_field'));

CSRF (Cross-Site Request Forgery) আক্রমণ

CSRF আক্রমণ ব্যবহারকারীর অনুমতি ছাড়া তার ব্রাউজারের মাধ্যমে একটি অনিচ্ছাকৃত রিকোয়েস্ট পাঠানোর মাধ্যমে ঘটে। এটি সাইটের ব্যবহারকারীর সেশনের অধিকার নিয়ে আক্রমণকারী গোপনে কোনো অনুকূল অ্যাকশন সম্পাদন করতে পারে।

CodeIgniter-এ CSRF সুরক্ষা

CodeIgniter ডিফল্টভাবে CSRF Protection সক্রিয় করে, তবে এটি কনফিগার করা বা কাস্টমাইজও করা যেতে পারে। CSRF সুরক্ষা নিশ্চিত করার জন্য, CodeIgniter টোকেন ব্যবহার করে, যা ফর্ম সাবমিশনের সময় যাচাই করে।

CSRF সুরক্ষা সক্ষম করা
  1. CSRF ফিচার কনফিগারেশন: app/Config/Security.php ফাইলে CSRF সুরক্ষা সক্ষম করার জন্য নিচের মত কনফিগার করুন।
public $CSRFProtection = true;  // CSRF সুরক্ষা সক্রিয়
public $csrfTokenName = 'csrf_test_name'; // CSRF টোকেনের নাম
public $csrfHeaderName = 'X-CSRF-TOKEN'; // CSRF টোকেন হেডার
public $csrfExpire = 7200; // CSRF টোকেনের মেয়াদ
  1. csrf_token() এবং csrf_hash() ব্যবহার:
    • ফর্ম তৈরি করার সময় CSRF টোকেন যোগ করতে পারেন।
// CSRF টোকেন ইনপুট ফর্মে অ্যাড করা
echo form_open('your/form/action');
echo form_input(['name' => 'username', 'value' => '']);
echo form_submit('submit', 'Submit');
echo csrf_field(); // CSRF টোকেন ফর্মে অ্যাড করা
echo form_close();
  • csrf_field() ফাংশনটি স্বয়ংক্রিয়ভাবে CSRF টোকেন ইনপুট হিসেবে HTML ফর্মে যোগ করবে।
CSRF টোকেন যাচাই

CodeIgniter স্বয়ংক্রিয়ভাবে POST রিকোয়েস্টের CSRF টোকেন যাচাই করে, তবে আপনি চাইলে csrf_verify() ফাংশন ব্যবহার করে ম্যানুয়ালি যাচাই করতে পারেন।

if (!$this->security->csrf_verify()) {
    echo 'Invalid CSRF Token';
}

XSS এবং CSRF সুরক্ষা এর সুবিধা

  1. XSS সুরক্ষা:
    • ম্যালিশিয়াস স্ক্রিপ্ট ইনজেকশন থেকে সাইট এবং ইউজারের ডেটা সুরক্ষিত রাখে।
    • ফর্ম ডেটা, URL প্যারামিটার, এবং কুকির মাধ্যমে ইনপুটকে স্যানিটাইজ করে।
  2. CSRF সুরক্ষা:
    • আক্রমণকারীকে ব্যবহারকারীর অনুমতি ছাড়াই অ্যাকশন নিতে বাধা দেয়।
    • নিরাপত্তার জন্য ফর্মে স্বতন্ত্র টোকেন ব্যবহার করে।

সারাংশ

  • XSS আক্রমণ থেকে সুরক্ষিত থাকার জন্য CodeIgniter xss_clean() মেথড প্রদান করে, যা ইনপুট ডেটাতে যেকোনো স্ক্রিপ্ট ফিল্টার করে।
  • CSRF আক্রমণ থেকে সুরক্ষিত থাকতে, CodeIgniter CSRF সুরক্ষা সক্ষম করে, যা ফর্ম সাবমিশনের সময় স্বতন্ত্র CSRF টোকেন ব্যবহার করে।
  • CodeIgniter-এ XSS এবং CSRF সুরক্ষা ব্যবহারে, আপনি সহজেই নিরাপত্তা বজায় রাখতে পারেন এবং অ্যাপ্লিকেশনের দুর্বলতা কমাতে পারেন।
Content added By

SQL Injection এর বিরুদ্ধে সুরক্ষা

SQL Injection হল একটি অত্যন্ত বিপজ্জনক নিরাপত্তা দুর্বলতা, যেখানে আক্রমণকারী ডাটাবেসে ম্যালিসিয়াস SQL কোড ইনজেক্ট করে অ্যাপ্লিকেশনের ডেটা চুরি বা ক্ষতিগ্রস্ত করতে পারে। SQL Injection থেকে সুরক্ষা নিশ্চিত করা খুবই গুরুত্বপূর্ণ, কারণ এটি আপনার অ্যাপ্লিকেশনকে ডেটা চুরির, সিস্টেমের ক্ষতি বা এমনকি পুরো ডাটাবেসটি মুছে ফেলার ঝুঁকিতে ফেলতে পারে।

CodeIgniter এ SQL Injection থেকে সুরক্ষা পাওয়ার জন্য বিভিন্ন বিল্ট-ইন সুরক্ষা ফিচার এবং সিকিউর কোডিং পদ্ধতি ব্যবহার করা যেতে পারে।


১. Query Builder ব্যবহার করুন

CodeIgniter এর Query Builder ক্লাস SQL ইনজেকশন প্রতিরোধে অত্যন্ত কার্যকর। Query Builder SQL কুয়েরি তৈরি করতে প্যারামিটারাইজড কোয়েরি ব্যবহার করে, যা ইনপুট ডেটা নিরাপদে পরিচালনা করতে সহায়ক।

Example: প্যারামিটারাইজড কোয়েরি

namespace App\Controllers;

use App\Models\ProductModel;

class ProductController extends BaseController
{
    public function index()
    {
        $model = new ProductModel();

        // ইনপুট ডেটা গ্রহণ
        $searchTerm = $this->request->getPost('search');

        // প্যারামিটারাইজড কোয়েরি ব্যবহার
        $builder = $model->builder();
        $builder->like('name', $searchTerm);  // LIKE query
        $products = $builder->get()->getResult();

        // রেসপন্স প্রেরণ
        return view('product_list', ['products' => $products]);
    }
}

এই পদ্ধতিতে, SQL কুয়েরির অংশগুলোর সাথে সরাসরি ব্যবহারকারীর ইনপুট যুক্ত না করে, কোয়েরি তৈরির সময় ইনপুট প্যারামিটার হিসেবে স্থানান্তরিত করা হয়। এতে SQL Injection এর ঝুঁকি কমে যায়।


২. Active Record/Query Builder ব্যবহার করুন

CodeIgniter এর Active Record (যা Query Builder হিসেবেও পরিচিত) স্বয়ংক্রিয়ভাবে ইনপুট ডেটাকে স্যানিটাইজ করে। তাই আপনাকে SQL কুয়েরিতে তথ্য ইনজেকশন রোধ করতে আলাদা কিছু করার প্রয়োজন হয় না।

Example: Active Record ব্যবহার

namespace App\Models;

use CodeIgniter\Model;

class ProductModel extends Model
{
    public function getProductById($id)
    {
        // Active Record এর মাধ্যমে ডেটা রিট্রিভ
        return $this->where('id', $id)->first();
    }
}

এখানে where() পদ্ধতিটি ইনপুট ডেটা স্যানিটাইজ করে, যার ফলে SQL Injection রোধ করা হয়।


৩. Query Binding ব্যবহার করুন

CodeIgniter Query Binding সিস্টেম ব্যবহার করে প্যারামিটারাইজড কোয়েরি তৈরি করতে সহায়তা করে। এতে প্লেইন SQL কোডে ব্যবহারকারীর ইনপুট মিশ্রিত না হয়ে, SQL ইনজেকশন প্রতিরোধ করা হয়।

Example: Query Binding ব্যবহার

namespace App\Controllers;

use App\Models\ProductModel;

class ProductController extends BaseController
{
    public function search()
    {
        $model = new ProductModel();
        
        // ব্যবহারকারীর ইনপুট থেকে সার্চ শব্দ গ্রহণ
        $searchTerm = $this->request->getPost('search');

        // Query Binding এর মাধ্যমে SQL ইনজেকশন প্রতিরোধ
        $query = $model->query('SELECT * FROM products WHERE name LIKE :search:', ['search' => "%$searchTerm%"]);
        $products = $query->getResult();

        // রেসপন্স
        return view('product_list', ['products' => $products]);
    }
}

এখানে, :search হল একটি প্যারামিটার, যা নিরাপদে ব্যবহারকারীর ইনপুট দিয়ে পরিবর্তিত হয়।


৪. Input Validation এবং Sanitization

যতটা সম্ভব, Input Validation এবং Sanitization ব্যবহারকারীর ইনপুট নিরাপদ করে। এই পদ্ধতিগুলি ব্যবহারকারীর ইনপুট সঠিক এবং নিরাপদ কিনা তা পরীক্ষা করে, এবং শুধুমাত্র বৈধ ইনপুট গ্রহণ করে।

Example: ইনপুট ভ্যালিডেশন

namespace App\Controllers;

use CodeIgniter\Controller;

class ProductController extends Controller
{
    public function create()
    {
        // ইনপুট ভ্যালিডেশন
        if (!$this->validate([
            'name' => 'required|min_length[3]|max_length[100]',
            'price' => 'required|decimal'
        ])) {
            return view('product_form', ['validation' => $this->validator]);
        }

        // ইনপুট গ্রহণ
        $name = $this->request->getPost('name');
        $price = $this->request->getPost('price');

        // Model এ ডেটা ইনসার্ট
        $productModel = new \App\Models\ProductModel();
        $productModel->save([
            'name' => $name,
            'price' => $price
        ]);
    }
}

এখানে validate() মেথড ব্যবহার করা হয়েছে ইনপুট ডেটা যাচাই করার জন্য, যা SQL Injection প্রতিরোধে সহায়ক।


৫. Escape Queries

যদি কোয়েরি তৈরি করার সময় Query Builder ব্যবহার না করতে হয়, তাহলে escape() ফাংশন ব্যবহার করে কাঁচা SQL ইনপুট স্যানিটাইজ করা যেতে পারে।

Example: Escape Queries ব্যবহার

namespace App\Controllers;

use App\Models\ProductModel;

class ProductController extends BaseController
{
    public function search()
    {
        $searchTerm = $this->request->getPost('search');
        
        // Escape input to prevent SQL injection
        $escapedSearchTerm = $this->db->escapeLikeString($searchTerm);

        $builder = $this->db->table('products');
        $builder->like('name', $escapedSearchTerm);
        $products = $builder->get()->getResult();

        return view('product_list', ['products' => $products]);
    }
}

এখানে escapeLikeString() ফাংশন ব্যবহার করা হয়েছে, যা ইনপুট ডেটা সঠিকভাবে স্যানিটাইজ করে।


৬. Prepared Statements ব্যবহার করুন

SQL ইনজেকশন প্রতিরোধের জন্য Prepared Statements ব্যবহৃত হতে পারে, যা ডেটাবেসে কোয়েরি চালানোর আগে ডেটা এবং কোয়েরি অংশ আলাদা রাখে।

Example: Prepared Statements ব্যবহার

namespace App\Controllers;

use App\Models\ProductModel;

class ProductController extends BaseController
{
    public function getProductById($id)
    {
        $query = $this->db->query('SELECT * FROM products WHERE id = :id:', ['id' => $id]);
        return $query->getRow();
    }
}

এখানে, :id হল একটি প্যারামিটার যা SQL কুয়েরির অংশ হিসেবে যুক্ত করা হয়, এবং ['id' => $id] দিয়ে প্যারামিটার নিরাপদে সেট করা হয়।


সারাংশ

SQL Injection প্রতিরোধের জন্য CodeIgniter বেশ কয়েকটি নিরাপদ পদ্ধতি সরবরাহ করে, যেমন Query Builder, Prepared Statements, Input Validation, এবং Sanitization। এই পদ্ধতিগুলোর মাধ্যমে ইনপুট ডেটাকে সঠিকভাবে প্রক্রিয়া করে ডাটাবেসে নিরাপদভাবে সংরক্ষণ করা হয়, যা SQL Injection থেকে অ্যাপ্লিকেশনকে সুরক্ষিত রাখে।

Content added By

Password Hashing এবং Authentication

CodeIgniter-এ Password Hashing এবং Authentication নিরাপত্তার গুরুত্বপূর্ণ দিক। Password Hashing নিশ্চিত করে যে ব্যবহারকারীর পাসওয়ার্ড প্লেইন টেক্সটে সংরক্ষিত না হয়ে hashed আকারে রাখা হয়, যা নিরাপত্তা বাড়ায়। Authentication ব্যবহারকারীর পরিচয় যাচাই করার প্রক্রিয়া, যাতে শুধুমাত্র অনুমোদিত ব্যবহারকারীরা অ্যাপ্লিকেশনে প্রবেশ করতে পারে।

Password Hashing

পাসওয়ার্ড হ্যাশিং একটি নিরাপত্তা প্রক্রিয়া, যেখানে পাসওয়ার্ডকে একটি একমুখী ফাংশন দিয়ে হ্যাশ করা হয় এবং এটি ডেটাবেসে সংরক্ষণ করা হয়। যখন ব্যবহারকারী লগইন করতে চেষ্টা করেন, তখন তাদের প্রদত্ত পাসওয়ার্ডকে হ্যাশ করা পাসওয়ার্ডের সাথে তুলনা করা হয়।


CodeIgniter-এ Password Hashing

১. Password Hashing তৈরি

CodeIgniter 4 এ Password হ্যাশিং করতে password_hash() এবং password_verify() ফাংশন ব্যবহার করা হয়।

১.১. পাসওয়ার্ড হ্যাশিং এবং সঞ্চয়
namespace App\Controllers;

use CodeIgniter\Controller;

class AuthController extends Controller {
    
    public function register() {
        // ফর্ম ডেটা
        $password = $this->request->getPost('password');

        // পাসওয়ার্ড হ্যাশিং
        $hashedPassword = password_hash($password, PASSWORD_DEFAULT);

        // ডাটাবেসে হ্যাশড পাসওয়ার্ড সংরক্ষণ করুন
        $data = [
            'username' => $this->request->getPost('username'),
            'email'    => $this->request->getPost('email'),
            'password' => $hashedPassword
        ];

        // ডাটাবেসে ডেটা ইনসার্ট করুন
        // Assume you have a model for users
        $userModel = new \App\Models\UserModel();
        $userModel->save($data);

        return redirect()->to('login'); // অথবা Success Page
    }
}
  • password_hash($password, PASSWORD_DEFAULT): এটি একটি নিরাপদ হ্যাশ (যেমন bcrypt) তৈরি করবে, যা পাসওয়ার্ডকে নিরাপদে সংরক্ষণ করবে।
  • PASSWORD_DEFAULT: এটি bcrypt অথবা অন্য উন্নত পদ্ধতিতে পাসওয়ার্ড হ্যাশ করবে।
১.২. পাসওয়ার্ড যাচাই করা

লগইন করার সময়, ব্যবহারকারীর ইনপুট করা পাসওয়ার্ড যাচাই করার জন্য password_verify() ফাংশন ব্যবহার করা হয়।

public function login() {
    // ইনপুট ডেটা
    $email = $this->request->getPost('email');
    $password = $this->request->getPost('password');
    
    // ব্যবহারকারী ডেটা প্রাপ্তি
    $userModel = new \App\Models\UserModel();
    $user = $userModel->where('email', $email)->first();

    // পাসওয়ার্ড যাচাই
    if ($user && password_verify($password, $user['password'])) {
        // লগইন সফল
        session()->set('user_id', $user['id']);
        return redirect()->to('dashboard'); // ড্যাশবোর্ডে রিডাইরেক্ট করুন
    } else {
        // লগইন ব্যর্থ
        return redirect()->to('login')->with('error', 'Invalid credentials');
    }
}
  • password_verify($password, $hashedPassword): এটি ব্যবহারকারীর ইনপুট করা পাসওয়ার্ড এবং ডাটাবেসে সংরক্ষিত হ্যাশড পাসওয়ার্ডের সাথে তুলনা করবে।

Authentication

Authentication হল ব্যবহারকারীর পরিচয় যাচাই করার প্রক্রিয়া, যেখানে পাসওয়ার্ড হ্যাশিং ব্যবহৃত হয়। লগইন এবং সেশন ব্যবস্থাপনা এই প্রক্রিয়ার অন্তর্ভুক্ত।

২. Session Management

CodeIgniter সেশন পরিচালনার জন্য বিল্ট-ইন সেশন লাইব্রেরি সরবরাহ করে। সেশন ব্যবহার করে আপনি লগইন করা ব্যবহারকারীকে ট্র্যাক করতে পারেন।

২.১. সেশন শুরু করা
namespace App\Controllers;

use CodeIgniter\Controller;

class AuthController extends Controller {
    
    public function login() {
        // ফর্ম ডেটা
        $email = $this->request->getPost('email');
        $password = $this->request->getPost('password');
        
        // ব্যবহারকারী ডেটা প্রাপ্তি
        $userModel = new \App\Models\UserModel();
        $user = $userModel->where('email', $email)->first();

        // পাসওয়ার্ড যাচাই
        if ($user && password_verify($password, $user['password'])) {
            // সেশন সেট করা
            session()->set('user_id', $user['id']);
            session()->set('username', $user['username']);
            return redirect()->to('dashboard'); // ড্যাশবোর্ডে রিডাইরেক্ট করুন
        } else {
            return redirect()->to('login')->with('error', 'Invalid credentials');
        }
    }
    
    public function logout() {
        // সেশন ডেস্ট্রয় করা
        session()->destroy();
        return redirect()->to('login'); // লগইন পেজে রিডাইরেক্ট
    }
}
  • session()->set(): সেশন ডেটা সেট করে।
  • session()->destroy(): সেশন মুছে দেয়।
২.২. সেশন যাচাই

লগইন করা ব্যবহারকারীর প্রমাণীকরণ যাচাই করতে, আপনি সেশন ডেটা ব্যবহার করতে পারেন:

public function dashboard() {
    if (!session()->has('user_id')) {
        return redirect()->to('login'); // যদি সেশন না থাকে, লগইন পেজে রিডাইরেক্ট
    }
    // ড্যাশবোর্ড কনটেন্ট দেখান
    return view('dashboard');
}

Authorization

Authorization হল একটি ব্যবহারকারী কোন বিশেষ ভূমিকা বা অনুমতি পায় তা যাচাই করা। যেমন, কিছু পেজ শুধুমাত্র প্রশাসকরা অ্যাক্সেস করতে পারবে।

public function adminDashboard() {
    if (!session()->has('user_id') || session()->get('role') !== 'admin') {
        return redirect()->to('login'); // প্রশাসক ছাড়া অন্য কেউ অ্যাক্সেস করতে পারবে না
    }
    return view('admin_dashboard');
}

এখানে, role সেশন ভেরিয়েবলের মাধ্যমে একজন ব্যবহারকারী প্রশাসক কিনা তা যাচাই করা হয়।


CodeIgniter এ Password Hashing এবং Authentication সেরা প্র্যাকটিস

  1. পাসওয়ার্ড হ্যাশিং ব্যবহার করুন: কখনোই পাসওয়ার্ড প্লেইন টেক্সটে সংরক্ষণ করবেন না। password_hash() এবং password_verify() ব্যবহার করুন।
  2. সেশন সুরক্ষা: ব্যবহারকারীর সেশন সুরক্ষিত রাখার জন্য CodeIgniter এর সেশন লাইব্রেরি ব্যবহার করুন। সেশন লাইফটাইম এবং সিকিউরিটি সেটিংস কনফিগার করুন।
  3. Role-based Authorization: ব্যবহারকারীর ভূমিকা যাচাই করতে role-based authorization ব্যবহার করুন, যাতে আপনি নির্দিষ্ট রিসোর্স কেবল নির্দিষ্ট ভূমিকা বা অনুমতি পেয়েছেন এমন ব্যবহারকারীদের জন্য অ্যাক্সেস করতে পারেন।
  4. এলার্টস ব্যবহার করুন: লগইন এবং রেজিস্ট্রেশন ফর্মে এলার্ট ব্যবহার করে ব্যবহারকারীকে সফল বা ব্যর্থ লগইন বার্তা দেখান।

সারাংশ

CodeIgniter এ Password Hashing এবং Authentication নিরাপত্তা এবং প্রমাণীকরণ ব্যবস্থাপনার জন্য গুরুত্বপূর্ণ দুটি উপাদান। পাসওয়ার্ড হ্যাশিংয়ের মাধ্যমে আপনি নিরাপদভাবে পাসওয়ার্ড সংরক্ষণ করতে পারেন এবং সেশন ম্যানেজমেন্ট এবং role-based authorization এর মাধ্যমে ব্যবহারকারীর প্রমাণীকরণ এবং অনুমতি যাচাই করতে পারেন।

Content added By
Promotion